In conventional computer systems, various components, such as CPUs, memory and peripheral devices, are interconnected by a common signal transfer path called a “bus”. Busses are implemented in a variety of well-known standard architectures including Fibre Channel architecture and, more recently, InfiniBandSM architecture. These architectures are not memory-mapped architectures. Instead, the CPU and memory are connected to host channel adapters. The input/output (I/O) devices are connected to target channel adapters. The host and target channel adapters communicate by messages comprising one or more data packets transmitted over serial point-to-point links established via a hardware switch fabric to which the host and target channel adapters are connected. The messages are enqueued for delivery between the channel adapters. This type of architecture will be referred to as a message-passing queue-oriented architecture in the following description.
The components connected to the channel adapters can control data transfer by creating structures called work queues. Work queues are always created in pairs, called queue pairs, and contain one work queue for send operations and one work queue for receive operations. Each client has one or more queue pairs and each queue pair is independent from other queue pairs. In general, the send work queue of a queue pair holds instructions that cause data to be transferred between a client's memory and another process's memory, and the receive work queue of a queue pair holds instructions that instruct the client where to place data that is received from another process. Another queue called a completion queue receives acknowledgements from the recipient of a message indicating the status of the requested operation. In order to use the work queue pair, a client submits a work request to its respective channel adapter and the work request causes an instruction called a “work queue element” to be placed on the appropriate send work queue.
Channel adapters developed by different companies and for different products are implemented differently. For example, different channel adapters may have a different internal structure for completion queues, queue pair state, or work queue elements. Even though the internal implementation may differ, in order to work with an InfiniBandSM system, all channel adapters must follow strictly an InfiniBandSM protocol that is defined in detail in an InfiniBandSM Specification Rev 1.0a, The InfiniBandSM Trade Association (2001).
One part of this specification relates to the manner in which a channel adapter connects to an InfiniBandSM switch fabric. Typically, the channel adapters connect to the switch fabric by means of a network protocol stack. In order to reduce design complexity, most networks are organized as a series of hardware and software levels or “layers” within each node. These layers interact to format data for transfer between nodes that are communicating over the network. Specifically, predetermined services are performed on the data as it passes through each layer and the layers communicate with each other by means of the predefined protocols. This layered design permits each layer to offer selected services to other layers using a standardized interface that shields those layers from the details of actual implementation of the services.
In an attempt to standardize network architectures, i.e., the sets of layers and protocols used within a network, a generalized model has been proposed by the International Standards Organization (ISO). The model, called the open systems interconnection (OSI) reference model, addresses the interconnection of systems that are “open” for communication with other systems. The proposed OSI model has seven layers which are termed, in ascending interfacing order, the “physical”, “data link”, “network”, “transport”, “session”, “presentation” and “application” layers. These layers are arranged to form a protocol “stack” in each node of the network.
In order to verify that a channel adapter is operating properly and complies with the aforementioned InfiniBandSM protocol, it is necessary to verify that the network layers are operating properly, and, in particular, that the network transport and link layers are operating properly. However, since these layers are implemented in the internal hardware of each channel adapter, it is necessary to test the hardware to determine whether it is implementing the InfiniBandSM protocol properly in these layers. Thus, special test circuits must be designed for each hardware implementation.